package com.hz.monitoring.module.hardware.service.warning_contact;

import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;

import java.util.*;
import com.hz.monitoring.module.hardware.controller.admin.warning_contact.vo.*;
import com.hz.monitoring.module.hardware.dal.dataobject.warning_contact.WarningContactDO;
import com.hz.monitoring.framework.common.pojo.PageResult;

import com.hz.monitoring.module.hardware.convert.warning_contact.WarningContactConvert;
import com.hz.monitoring.module.hardware.dal.mysql.warning_contact.WarningContactMapper;

import static com.hz.monitoring.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.hz.monitoring.module.hardware.enums.ErrorCodeConstants.*;

/**
 * 预警通讯方式管理 Service 实现类
 *
 * @author 芋道源码
 */
@Service
@Validated
public class WarningContactServiceImpl implements WarningContactService {

    @Resource
    private WarningContactMapper warningContactMapper;

    @Override
    public Long createWarningContact(WarningContactCreateReqVO createReqVO) {
        // 插入
        WarningContactDO warningContact = WarningContactConvert.INSTANCE.convert(createReqVO);
        warningContactMapper.insert(warningContact);
        // 返回
        return warningContact.getId();
    }

    @Override
    public void updateWarningContact(WarningContactUpdateReqVO updateReqVO) {
        // 校验存在
        this.validateWarningContactExists(updateReqVO.getId());
        // 更新
        WarningContactDO updateObj = WarningContactConvert.INSTANCE.convert(updateReqVO);
        warningContactMapper.updateById(updateObj);
    }

    @Override
    public void deleteWarningContact(Long id) {
        // 校验存在
        this.validateWarningContactExists(id);
        // 删除
        warningContactMapper.deleteById(id);
    }

    private void validateWarningContactExists(Long id) {
        if (warningContactMapper.selectById(id) == null) {
            throw exception(WARNING_CONTACT_NOT_EXISTS);
        }
    }

    @Override
    public WarningContactDO getWarningContact(Long id) {
        return warningContactMapper.selectById(id);
    }

    @Override
    public List<WarningContactDO> getWarningContactList(Collection<Long> ids) {
        return warningContactMapper.selectBatchIds(ids);
    }

    @Override
    public PageResult<WarningContactDO> getWarningContactPage(WarningContactPageReqVO pageReqVO) {
        return warningContactMapper.selectPage(pageReqVO);
    }

    @Override
    public List<WarningContactDO> getWarningContactList(WarningContactExportReqVO exportReqVO) {
        return warningContactMapper.selectList(exportReqVO);
    }

}
